
package appvideo;
import appvideo.logica.Empleado;
import appvideo.logica.Salario;
import appvideo.logica.Usuario;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SubMenu_gstionEmpleados {
    public static void gestionEmpleados(){
        //opc_submenu es usada para la seleccion de opciones de este submenu
                                int opc_submenu=0;
                                do{
                                    try{
                                        opc_submenu = ObtenerTeclado.dameEntero("Seleccione opcion:\n1.Alta Empleado\n2.Baja Empleado\n3.Modificar Empleado\n4.Visualizar Empleados\n5.Buscar Empleado\n6.Volver Atras"); 
                                        switch(opc_submenu){
                                            case 1://SUBMENU: ALTA EMPLEADO
                                                String nombre = ObtenerTeclado.dameCadena("Introduzca nombre:" );
                                                String apellido1 = ObtenerTeclado.dameCadena("Introduzca 1º apellido:");
                                                String apellido2 = ObtenerTeclado.dameCadena("Introduzca 2º apellido:");
                                                String apellidos = apellido1+" "+apellido2;
                                                String dniAlta = ObtenerTeclado.dameCadena("Introduzca DNI:");
                                                String email = ObtenerTeclado.dameCadena("Introduzca email:");
                                                String password = ObtenerTeclado.dameCadena("Introduzca password(sin espacios):");
                                                int tlf=0;
                                                
                                                try{
                                                    tlf  = ObtenerTeclado.dameEntero("Introduzca tlf:");
                                                    int horasTrabajadas = ObtenerTeclado.dameEntero("Introduzca numero de horas trabajadas de su empleado al mes: ");
                                                    float precioHora = Float.parseFloat(ObtenerTeclado.dameCadena("Introduzca precio-hora de su empleado: "));
                                                  
                                                    Salario sEmp = new Salario(horasTrabajadas,precioHora);
                                                    
                                                    Date fechaAltaEmp = new Date();
                                                    
                                                    Usuario empAlta = new Empleado(nombre,apellidos,dniAlta,email,tlf,sEmp,fechaAltaEmp,password);
                                                    empAlta.altaUsuario();
                                                    
                                                }catch(NumberFormatException nme){
                                                    System.out.println("Error: Introdujo datos no permitidos en telefono(numero entero), horas trabajadas(numero entero) o el precio(numero entero o decimal)");
                                                    opc_submenu=0;
                                                }
                                                break;
                                            case 2: //SUBMENU BAJA EMPLEADO
                                                String dniBaja = ObtenerTeclado.dameCadena("\nBusqueda Empleado:\nIntroduzca DNI:");
                                                Usuario empBaja = Empleado.buscaUsuario(dniBaja);
                                                if(empBaja!=null){
                                                    empBaja.bajaUsuario(); 
                                                }
            
                                                break;
                                            case 3:
                                                //Modificar empleado
                                                String dniModif = ObtenerTeclado.dameCadena("\nBusqueda Empleado:\nIntroduzca DNI:");
                                                Empleado empModif = Empleado.buscaUsuario(dniModif);
                                                if(empModif!=null){
                                                    int opc_modif_emp=0;
                                                    do{
                                                        try{//MENU MODIFICAR DATOS EMPLEADO
                                                            opc_modif_emp = ObtenerTeclado.dameEntero("Seleccione Dato a Modificar:\n1.Nombre\n2.Apellidos\n3.DNI\n4.Email"
                                                            + "\n5.Telefono\n6.Salario\n7.Fecha de Alta\n8.Volver(No se guardaran los datos)\n9.Confirmar(Actualizara todos los campos modificados)");

                                                            switch(opc_modif_emp){
                                                                case 1:
                                                                    empModif.setNombre(ObtenerTeclado.dameCadena("Introduzca nuevo Nombre: "));
                                                                    break;
                                                                case 2:
                                                                    //En el caso de los apellidos, debos pedirlo uno por uno, sino solo se quedaria con el primero
                                                                    String a1 = ObtenerTeclado.dameCadena("Introduzca primer Apellido: ");
                                                                    String a2 = ObtenerTeclado.dameCadena("Introduzca segundo Apellido: ");
                                                                    empModif.setApellidos(a1+" "+a2);
                                                                    break;
                                                                case 3:
                                                                    empModif.setDni(ObtenerTeclado.dameCadena("Introduzca nuevo DNI: "));
                                                                    break;
                                                                case 4:
                                                                    empModif.setEmail(ObtenerTeclado.dameCadena("Introduzca nuevo Email: "));
                                                                    break;
                                                                case 5:
                                                                    try{
                                                                        empModif.setTlf(ObtenerTeclado.dameEntero("Introduzca nuevo Telefono: "));
                                                                    }catch(NumberFormatException nme){
                                                                        System.out.println("Debe introducir numeros, no otros simbolos.");
                                                                        opc_submenu=0;
                                                                    }
                                                                    break;
                                                                case 6://OPCION MODIFICAR SALARIO EMPLEADO
                                                                    int opc_sub_emp=0;
                                                                    do{

                                                                            opc_sub_emp = ObtenerTeclado.dameEntero("\nIntroduzca tipo modificacion:\n1.Salario Bruto Mensual\n2.Precio/hora\n3.Horas Trabajadas\n4.Volver\n\nAVISO: Al Modificar el salario, el cambio se guardara en su Base de Datos directamente sin esperar a la confirmacion." );

                                                                                //SUBMENU TIPO ESTABLECIMIENTO SALARIO
                                                                                switch(opc_sub_emp){
                                                                                    //Primero lo modifico sobre el objeto y luego ataco la BD
                                                                                    //En este caso no espero a la confirmacion de la modificacion
                                                                                    case 1:
                                                                                        int salBruto = ObtenerTeclado.dameEntero("Introduzca nuevo salario bruto mensual de su empleado:"); 
                                                                                        (empModif).getSalario().setSalarioBrutoMensual(salBruto);
                                                                                        if(empModif.getSalario().modificaSalario(empModif)){
                                                                                            System.out.println("Salario Mensual Bruto de empleado de DNI "+dniModif+" cambiado a "+salBruto);
                                                                                        }else{
                                                                                            System.out.println("No se pudo realizar la actualizacion del salario debido a algun problema");
                                                                                        }
                                                                                        break;
                                                                                    case 2:
                                                                                        double precHora = ObtenerTeclado.dameDouble("Introduzca nuevo precio hora de su empleado:"); 
                                                                                        empModif.getSalario().setPrecioHora((float)precHora);
                                                                                        if(empModif.getSalario().modificaSalario(empModif)){
                                                                                            System.out.println("Precio/hora empleado DNI "+dniModif+" cambiado a "+precHora);
                                                                                        }else{
                                                                                            System.out.println("No se pudo realizar la actualizacion del salario debido a algun problema");
                                                                                        }
                                                                                        break;
                                                                                    case 3:
                                                                                        //MODIFICACION DE LAS HORAS TRABAJADAS, LO MODIFICAMOS TANTO EN EL OBJETO EMPLEADO COMO EN SU SALARIO
                                                                                        try{
                                                                                            int horasTrabajadas=ObtenerTeclado.dameEntero("Introduzca numero de horas trabajadas este mes por su empleado: ");
                                                                                            empModif.getSalario().setHorasTrabajadas(horasTrabajadas);
                                                                                            if(empModif.getSalario().modificaSalario(empModif)){
                                                                                                System.out.println("Nº horas trabajadas de empleado DNI "+dniModif+" cambiado a "+horasTrabajadas);
                                                                                            }else{
                                                                                                System.out.println("No se pudo realizar la actualizacion del salario debido a algun problema");
                                                                                            }
                                                                                        }catch(NumberFormatException nme){
                                                                                            System.out.println("Debe introducir numeros, no otros simbolos.");
                                                                                        }
                                                                                        break;
                                                                                    case 4:
                                                                                        break;
                                                                                    default:
                                                                                        break;

                                                                                }
                                                                    }while(opc_sub_emp<1 || opc_sub_emp>4);
                                                                    break;
                                                                case 7:
                                                                    //MODIFICACION DE LA FECHA DE ALTA, IMPONGO EL FORMATO A TRAVES DEL SimpleDateFormat
                                                                    SimpleDateFormat dtf = new SimpleDateFormat("yyyy-MM-dd");
                                                                    String stringFecha=ObtenerTeclado.dameCadena("Introduzca nueva fecha(yyyy-MM-dd):");
                                                                    try {
                                                                        Date nuevoDate = dtf.parse(stringFecha);
                                                                        empModif.setfAlta(nuevoDate);
                                                                    } catch (ParseException ex) {
                                                                        System.out.println("No ha introducido el formato requerido para la fecha.");
                                                                    }
                                                                    
                                                                    break;
                                                                case 8:
                                                                    //Codigo necesario para volver al submenu anterior
                                                                    //Los cambios que hayas hecho hasta el momento no se guardan en la BD
                                                                    opc_submenu=0;
                                                                    break;
                                                                case 9:
                                                                    //CONFIRMACION DE LA MODIFICACION. AHORA ATACO A LA BD 
                                                                    //CON TODO LO MODIFICADO ANTERIORMENTE(Excepto el Salario que va aparte)
                                                                    empModif.modificaUsuario();
                                                                    break;
                                                                default:
                                                                    break;
                                                            }

                                                        }catch(NumberFormatException nme){
                                                            System.out.println("Error con la opción elegida.");
                                                        }
                                                    }while(opc_modif_emp!= 8 && opc_modif_emp!=9);
                                                }
                                                break;
                                            case 4:
                                                //Visualizar empleados
                                                Empleado.visualizaEmpleados();
                                                break;
                                            case 5:
                                                //Buscar un empleado
                                                dniModif = ObtenerTeclado.dameCadena("\nBusqueda Empleado:\nIntroduzca DNI:");
                                                empModif = Empleado.buscaUsuario(dniModif);
                                                if(empModif!=null){
                                                    System.out.println(""+empModif.toString());
                                                }
                                                break;
                                            case 6://Volver atrás->A menu principal
                                                //Se pone a 0 la opcion del menu superior para no
                                                //salir del todo
                                                main.opc=0;
                                                break;
                                            default:
                                                System.out.println("Error con la opción elegida.");
                                                break;
                                        }
                                    }catch(NumberFormatException nme){
                                        System.out.println("Error con la opción elegida.");
                                    }
                                }while(opc_submenu<1 || opc_submenu>6);
    }
}
 